java Apache Camel库是否会长期保存内存?
我正在使用verbosegc
捕获一些数据,并尝试分析我的应用程序的内存使用情况
我有一个模块,将从数据库或第三方提取数据,并将其放入列表对象,然后只返回前端显示
当我选择日期作为日期范围时,它将从数据库中提取数据。
当我选择今天的日期时,我的应用程序将向MQ
服务器发送请求,MQ
服务器将用xml
消息响应我的应用程序。我将使用apachecamel库来处理它
如您所见,每次触发搜索功能时,内存使用量都会增加,然后又会下降。所以这是正常的,也是我所期望的
这是从第三方提取数据时的verbosegc
屏幕截图。
正如你所看到的,在内存增加后,它将在那里水平放置一段时间,然后只会下降
我怀疑这个组织。阿帕奇。骆驼交换或组织。阿帕奇。骆驼消息或Apache中的那些对象将保留更长的内存时间
下面是我处理来自第三方的xml
消息的一些代码:
/**
* Camel Exchange producer template
*/
protected ProducerTemplate< Exchange > template;
@SuppressWarnings("unchecked")
private < T > T doSend(final Object request, final String headerName,
final Object headerObject,
final SendEaiMessageTemplateCallBack callback)
throws BaseRuntimeException {
log.debug( "doSend START >> {} ", request );
if ( this.requestObjectValidator != null
&& requestObjectValidator
.requiredValidation( requestObjectValidator ) ) {
requestObjectValidator.validateRequest( request );
}
final Exchange exchange = template.request( to, new Processor( ) {
public void process(final Exchange exchange) throws Exception {
exchange.getIn( ).setBody( request );
if ( headerName != null && headerObject != null ) {
exchange.getIn( ).setHeader( headerName, headerObject );
}
}
} );
log.debug( "doSend >> END >> exchange is failed? {}",
exchange.isFailed( ) );
Message outBoundMessage = null;
if ( callback != null ) {
// provide the callBack method to access exchange
callback.exchangeCallBack( exchange );
}
if ( exchange.isFailed( ) ) {
failedHandler.handleExchangeFailed( exchange, request );
} else {
outBoundMessage = exchange.getOut( false );
}
// handler outbound message
if ( this.outboundMessageHandler != null ) {
this.outboundMessageHandler.handleMessage( outBoundMessage );
}
if ( outBoundMessage != null ) {
if ( outBoundMessage.getBody( ) != null ) {
log.debug( "OutBoundMessage body {}", outBoundMessage.getBody( ) );
}
return (T) outBoundMessage.getBody( );
} else {
return null;
}
}
因此,我的应用程序遇到了内存不足异常。我不确定是不是因为ApacheCamel库,敬请告知
除此之外,当我打开heapdump
文件时,有52%的投诉发生在com/ibm/xml/xlxp2/scan/util/SimpleDataBufferFactory$DataBufferLink
另一个是“Java堆仅由这个char[]使用”,这也是DataBufferLink
下的一些子类别
我在谷歌上看到的,都是说xml消息太大了
我不知道应该以何种方式或方向继续进行故障排除,能否就此提出建议
仅供参考,我正在使用camel-core-1.5.0。罐子
共 (0) 个答案